<?php


# --- Désactiver les guillements magiques ---
if (get_magic_quotes_gpc()) {
	function stripslashes_deep($value)
	{
		$value = is_array($value) ?
		array_map('stripslashes_deep', $value) :
		stripslashes($value);

		return $value;
	}

	$_POST = array_map('stripslashes_deep', $_POST);
	$_GET = array_map('stripslashes_deep', $_GET);
	$_COOKIE = array_map('stripslashes_deep', $_COOKIE);
	$_REQUEST = array_map('stripslashes_deep', $_REQUEST);
}


# --- Headers ---
session_start();

// HTTP/1.1
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0');
header('Content-Type: text/html; charset=utf-8');

// HTTP/1.0
header("Pragma: no-cache");


# --- Inclusion du fichier de configuration ---
if(file_exists(dirname(__FILE__).'/../../config/config.inc.php')) {
	require dirname(__FILE__).'/../../config/config.inc.php';
}


#--- Clearbricks ---
if(!defined('CLEARBRICKS_PATH')) {
if (@is_dir('/usr/lib/clearbricks')) {
	define('CLEARBRICKS_PATH','/usr/lib/clearbricks');
} elseif (is_dir(dirname(__FILE__).'/../../inc/clearbricks')) {
	define('CLEARBRICKS_PATH',dirname(__FILE__).'/../../inc/clearbricks');
} elseif (isset($_SERVER['CLEARBRICKS_PATH']) && is_dir($_SERVER['CLEARBRICKS_PATH'])) {
	define('CLEARBRICKS_PATH',$_SERVER['CLEARBRICKS_PATH']);
}
}

if (!defined('CLEARBRICKS_PATH') || !is_dir(CLEARBRICKS_PATH)) {
	exit('No clearbricks path defined');
}

require CLEARBRICKS_PATH.'/_common.php';


# --- Détection de la langue et du fuseau horaire ---

$dlang = http::getAcceptLanguage();
if ($dlang != 'fr')
{
	l10n::init();
	l10n::set(dirname(__FILE__).'/../../langues/'.$dlang.'/main');
}

$default_tz = 'America/Montreal';
if (!empty($_POST['u_date']) && function_exists('timezone_open'))
{
	if (preg_match('/\((.+)\)$/',$_POST['u_date'],$_tz)) {
		$_tz = $_tz[1];
		$_tz = @timezone_open($_tz);
		if ($_tz instanceof DateTimeZone) {
			$_tz = @timezone_name_get($_tz);
			if ($_tz) {
				$default_tz = $_tz;
			}
		}
		unset($_tz);
	}
}
dt::setTZ($default_tz);


# --- Fonction pour écrire dans le fichier de configuration ---

function writeConfigValue($name,$val,&$str)
{
	$val = str_replace("'","\'",$val);
	$str = preg_replace('/(\''.$name.'\')(.*?)$/ms','$1,\''.$val.'\');',$str);
}


# --- Étapes de l'installation ---

$etape = !empty($_GET['etape']) ? (integer) $_GET['etape'] : 1;

if($etape != 1 && $etape != $_SESSION['install_next_step']) {
	$etape = $_SESSION['install_next_step'];
}

switch($etape):

	case 1:
		
		# --- Bienvenue ---
		
		$titre = __('Bienvenue');
		$body =
		'<p>'.__('Cet assistant vous guidera tout au long des étapes '.
		'de l\'installation de Clicpage.').'</p>'.
		'<p><a href="index.php?etape=2">'.__('Commencer l\'installation').' »</a></p>';
		
		$_SESSION['install_next_step'] = 2;
		
	break;
	
	case 2:
		
		# --- Création du fichier de configuration ---
		
		$titre = __('Création du fichier de configuration');

		# Valeurs par défaut
		$dbdriver = '';
		$dbhost = '';
		$dbuser = '';
		$dbpassword = '';
		$dbname = '';
		$dbprefix = 'cp_';
		
		if($_POST['action'] == 'fichierConfig')
		{
			# L'utilisateur a envoyé une configuration par le formulaire.
			$config_exists = false;
			$check = true;
			
			$dbdriver = $_POST['dbdriver'];
			$dbhost = $_POST['dbhost'];
			$dbuser = $_POST['dbuser'];
			$dbpassword = $_POST['dbpassword'];
			$dbname = $_POST['dbname'];
			$dbprefix = $_POST['dbprefix'];
			
		} elseif(file_exists(dirname(__FILE__).'/../../config/config.inc.php')) {
			
			# Un fichier de configuration existe déjà.
			$config_exists = true;
			$check = true;
			
			$dbdriver = CP_DBDRIVER;
			$dbhost = CP_DBHOST;
			$dbuser = CP_DBUSER;
			$dbpassword = CP_DBPASSWORD;
			$dbname = CP_DBNAME;
			$dbprefix = CP_DBPREFIX;
			
		}
		
		$err = '';
		if($check)
		{
			# Il y a des données à vérifier.
			try
			{
				
				# Vérification de la connexion à la base de données
				$con = dbLayer::init($dbdriver,$dbhost,$dbname,$dbuser,$dbpassword,false);
				
				# Vérifier si les tables existent déjà
				$schema = dbSchema::init($con);
				if (in_array($dbprefix.'pub_pages',$schema->getTables())) {
					throw new Exception(__('Les tables de Clicpage existent déjà dans la base de données.'));
				}
				
				# Création du fichier de configuration
				if(!$config_exists)
				{
					# Le fichier de configuration n'existe pas encore
					$config_temp = dirname(__FILE__).'/../../config/temp.config.inc.php';
					if (!is_file($config_temp)) {
						throw new Exception(sprintf(__('Le fichier de configuration temporaire (%s) n\'existe pas.'),path::clean($config_temp)));
					}
					
					# Récupérer le contenu du fichier de configuration temporaire
					$full_conf = file_get_contents($config_temp);
					
					# Modifier le contenu du fichier de configuration temporaire
					writeConfigValue('CP_RACINE',preg_replace('%/admin/install$%','',dirname(__FILE__)),$full_conf);
					
					$public_url = http::getHost().preg_replace('%admin/install/index.php.+%','',$_SERVER['REQUEST_URI']);
					writeConfigValue('CP_URL_PUBLIQUE',$public_url.'index.php?/',$full_conf);
					writeConfigValue('CP_URL_ADMIN',$public_url.'admin/',$full_conf);
					writeConfigValue('CP_URL_THEMES',$public_url.'themes/',$full_conf);
					
					writeConfigValue('CP_DBDRIVER',$dbdriver,$full_conf);
					writeConfigValue('CP_DBHOST',$dbhost,$full_conf);
					writeConfigValue('CP_DBUSER',$dbuser,$full_conf);
					writeConfigValue('CP_DBPASSWORD',$dbpassword,$full_conf);
					writeConfigValue('CP_DBNAME',$dbname,$full_conf);
					writeConfigValue('CP_DBPREFIX',$dbprefix,$full_conf);
					
					writeConfigValue('CP_MASTER_KEY',md5(uniqid()),$full_conf);
					
					writeConfigValue('CLEARBRICKS_PATH',CLEARBRICKS_PATH,$full_conf);
					
					# Le fichier est-il accessible en écriture?
					$config_file = dirname(__FILE__).'/../../config/config.inc.php';
					
					$doit_creer_manuellement = false;

					$fp = @fopen($config_file,'wb');
					if ($fp === false) {
						$doit_creer_manuellement = true;
					} else {
						fwrite($fp,$full_conf);
						fclose($fp);
						chmod($config_file, 0666);
						
						$_SESSION['install_next_step'] = 3;	
						http::redirect('index.php?etape=3');
					}
				
				}
				
			}
			catch(Exception $e)
			{
				$err = $e->getMessage();				
			}
				
		}
		
		$body = '';
		
		if($config_exists) {
			$body.=
			'<p>'.__('Un fichier de configuration a été détecté.').'</p>';
			
			if($err == '') {
				$_SESSION['install_next_step'] = 3;	
				
				$body.=
				'<p><a href="index.php?etape=3">'.__('Cliquez ici pour continuer.').'</a></p>';
			} else {
				$body.=
				'<p class="erreur">'.sprintf(__('Cependant, une erreur a été détectée (%s).'), $err).'</p>'.
				'<p>'.sprintf(__('Veuillez corriger votre fichier de configuration, puis <a %s>cliquez ici pour réessayer</a>.'), 'href="index.php?etape=2&try_again=1"').'</p>';
			}
			
		} elseif($doit_creer_manuellement) {
			
			$body.=
			'<p>'.sprintf(__('Le fichier de configuration (%s) n\'est pas accessible en écriture.'), path::clean($config_file)).'</p>'.
			'<p>'.__('Nous vous invitons donc à le créer manuellement et à y entrer le code suivant:').'</p>'.
			form::textarea('code_a_copier', 75, 20, $full_conf).
			'<p>'.sprintf(__('Une fois le fichier créé, <a %s>cliquez ici pour continuer</a>.'), 'href="index.php?etape=2"').'</p>';
			
		} else {			
			
			$body.=
			'<p>'.__('Remplissez le formulaire ci-dessous afin de configurer Clicpage.').'</p>';
		
			if($err != '') {
				$body.=
				'<p class="erreur">'.__('Une erreur a été détectée:').' '.$err.'</p>';
			}
			
			$body.=
			'<form method="post" action="index.php?etape=2">'.
			form::hidden('action', 'fichierConfig').
			'<fieldset>'.
				'<legend>'.__('Base de données').'</legend>'.
				'<p>'.
					'<label for="dbdriver">'.__('Type de base de données').' *</label>'.
					form::combo('dbdriver', array(
						'MySQL' 	=> 'mysql',
						'PostgreSQL'=> 'pgsql'
					), $dbdriver).
				'</p>'.
				'<p>'.
					'<label for="dbhost">'.__('Nom d\'hôte de la base de données').' *</label>'.
					form::field('dbhost',30,60,$dbhost).
					'<span>'.sprintf(__('Habituellement «%s»'), 'localhost').'</span>'.
				'</p>'.
				'<p>'.
					'<label for="dbuser">'.__('Nom d\'utilisateur de la base de données').' *</label>'.
					form::field('dbuser',30,60,$dbuser).
				'</p>'.
				'<p>'.
					'<label for="dbpassword">'.__('Mot de passe de la base de données').'</label>'.
					form::password('dbpassword',30,60,$dbpassword).
				'</p>'.
				'<p>'.
					'<label for="dbname">'.__('Nom de la base de données').' *</label>'.
					form::field('dbname',30,60,$dbname).
				'</p>'.
				'<p>'.
					'<label for="dbprefix">'.__('Préfixe des tables de la base de données').' *</label>'.
					form::field('dbprefix',30,60,$dbprefix).
				'</p>'.
			'</fieldset>'.
			'<input type="submit" value="'.__('Créer le fichier de configuration').'" />'.
			'</form>'.
			'<p>(*) '.__('indique un champ requis').'</p>';
		}
	break;

	case 3:
		
		# --- Vérification de la configuration
		
		$errGen = '';
		$err = array();
		
		try {
	
		if (version_compare(phpversion(),'5.0','<')) {
			$err[] = sprintf(__('Votre version de PHP est %s (%s ou plus récente nécessaire).'),phpversion(), '5.0');
		}
		
		if (!function_exists('mb_detect_encoding')) {
			$err[] = __('Le module pour les chaînes de caractères multi-octets (mbstring) n\'est pas disponible.');
		}

		if (!function_exists('iconv')) {
			$err[] = __('Le module Iconv n\'est pas disponible.');
		}
		
		if (!function_exists('ob_start')) {
			$err[] = __('Les fonctions de bufferisation de sortie (ob_start) ne sont pas disponibles.');
		}
		
		if (!function_exists('simplexml_load_string')) {
			$err[] = __('Le module SimpleXML n\'est pas disponible.');
		}
		
		$pcre_str = base64_decode('w6nDqMOgw6o=');
		if (!@preg_match('/'.$pcre_str.'/u', $pcre_str)) {
			$err[] = __('Le moteur d\'expressions rationnelles PCRE ne gère pas les chaînes UTF-8.');
		}
		
		if (!function_exists("spl_classes")) {
			$err[] = __('Le module SPL n\'est pas disponible.');
		}
		
		$con = dbLayer::init(CP_DBDRIVER,CP_DBHOST,CP_DBNAME,CP_DBUSER,CP_DBPASSWORD,CP_DBPERSIST);
		if ($con->driver() == 'mysql')
		{
			if (version_compare($con->version(),'4.1','<'))
			{
				$err[] = sprintf(__('La version de MySQL est %s (%s ou plus récente nécessaire).'),$con->version(), '4.1');
			}
			else
			{
				$rs = $con->select('SHOW ENGINES');
				$innodb = false;
				while ($rs->fetch()) {
					if (strtolower($rs->f(0)) == 'innodb' && strtolower($rs->f(1)) != 'disabled' && strtolower($rs->f(1)) != 'no') {
						$innodb = true;
						break;
					}
				}
				
				if (!$innodb) {
					$err[] = __('Le gestionnaire de stockage InnoDB de MySQL n\'est pas disponible.');
				}
			}
		}
		elseif ($con->driver() == 'pgsql')
		{
			if (version_compare($con->version(),'8.0','<'))
			{
				$err[] = sprintf(__('La version de PostgreSQL est %s (%s ou plus récente nécessaire).'),$con->version(), '8.0');
			}
		}
		
		
		# Création des tables
		if(count($err) == 0)
		{
			$_s = new dbStruct($con,CP_DBPREFIX);
			require CP_RACINE.'/inc/dbschema/dbschema.php';

			$si = new dbStruct($con,CP_DBPREFIX);
			$changes = $si->synchronize($_s);
		}
		
		}
		catch(Exception $e) {
			$errGen = $e->getMessage();
		}
		

		# Affichage
		$titre = __('Vérification de la configuration');
		
		if($errGen != '')
		{
			$body =
			'<p>'.__('Une erreur a été détectée dans votre configuration.').'</p>'.
			'<p>'.$errGen.'</p>';
		}
		elseif(count($err) == 0)
		{
			$body =
			'<p>'.__('Votre configuration correspond aux exigences de Clicpage!').'</p>'.
			'<p>'.__('Les tables ont été correctement créées dans la base de données.').'</p>'.
			'<p><a href="index.php?etape=4">'.__('Cliquez ici pour continuer.').'</a></p>';
			$_SESSION['install_next_step'] = 4;
		}
		else
		{
			$body =
			'<p>'.__('Il est impossible d\'installer Clicpage, car votre configuration ne satisfait '.
			'pas aux exigences minimales du logiciel. Veuillez remédier aux problèmes suivants:').'</p>'.
			'<ul>';
			
			foreach($err as $e) {
				$body.= '<li>'.$e.'</li>';
			}
			
			$body.= 
			'</ul>';
		}
		
	break;
	
	case 4:
		
		# --- Création du premier utilisateur ---
		
		$titre = __('Création du premier utilisateur');
		
		try {
			if($_POST['action'] == 'creerUtilisateur')
			{
				if(empty($_POST['utilisateur_login'])) {
					throw new Exception(__('Vous devez indiquer un nom d\'utilisateur.'));
				}
				
				if (strlen($_POST['utilisateur_login']) < 2 || strlen($_POST['utilisateur_login']) > 64) {
					throw new Exception(__('Le nom d\'utilisateur doit contenir entre 2 et 64 caractères.'));
				}
				
				if(empty($_POST['utilisateur_mot_de_passe_1'])) {
					throw new Exception(__('Vous devez indiquer un mot de passe.'));
				}
				
				if($_POST['utilisateur_mot_de_passe_1'] != $_POST['utilisateur_mot_de_passe_2']) {
					throw new Exception(__('Les deux mots de passe spécifiés ne correspondent pas.'));
				}
				
				if(empty($_POST['utilisateur_pseudo'])) {
					throw new Exception(__('Vous devez indiquer un pseudonyme (ce peut être votre vrai nom).'));
				}
				
				if(!empty($_POST['utilisateur_email']) && !text::isEmail($_POST['utilisateur_email'])) {
					throw new Exception(__('Adresse email invalide.'));
				}
				
				# Connexion à la base de données
				$con = dbLayer::init(CP_DBDRIVER,CP_DBHOST,CP_DBNAME,CP_DBUSER,CP_DBPASSWORD,CP_DBPERSIST);
				
				# Création du premier groupe d'utilisateurs
				$cur = $con->openCursor(CP_DBPREFIX.'groupes_utilisateurs');
				$cur->groupe_id					= 1;
				$cur->groupe_nom				= __('Administrateurs');
				$cur->groupe_permissions		= 'a:16:{s:19:"public_commentaires";b:1;s:11:"administrer";b:1;s:5:"pages";b:1;s:11:"toutesPages";b:1;s:11:"publierPage";b:1;s:13:"supprimerPage";b:1;s:14:"creerCategorie";b:1;s:18:"supprimerCategorie";b:1;s:6:"medias";b:1;s:10:"tousMedias";b:1;s:14:"supprimerMedia";b:1;s:12:"commentaires";b:1;s:8:"reglages";b:1;s:9:"apparence";b:1;s:7:"gadgets";b:1;s:12:"utilisateurs";b:1;}';
				$cur->insert();
				
				$cur->groupe_id					= 2;
				$cur->groupe_nom				= __('Rédacteurs');
				$cur->groupe_permissions		= 'a:12:{s:19:"public_commentaires";b:1;s:11:"administrer";b:1;s:5:"pages";b:1;s:11:"toutesPages";b:0;s:11:"publierPage";b:0;s:14:"creerCategorie";b:0;s:6:"medias";b:1;s:10:"tousMedias";b:0;s:12:"commentaires";b:0;s:8:"reglages";b:0;s:7:"gadgets";b:0;s:12:"utilisateurs";b:0;}';
				$cur->insert();
				
				$cur->groupe_id					= 3;
				$cur->groupe_nom				= __('Visiteurs');
				$cur->groupe_permissions		= 'a:2:{s:19:"public_commentaires";b:1;s:11:"administrer";b:0;}';
				$cur->insert();
				
				# Création du premier utilisateur
				$cur = $con->openCursor(CP_DBPREFIX.'utilisateurs');
				$cur->utilisateur_id 			= 1;
				$cur->utilisateur_superadmin	= 1;
				$cur->groupe_id					= 1;
				$cur->utilisateur_login			= $_POST['utilisateur_login'];
				$cur->utilisateur_mot_de_passe	= crypt::hmac(CP_MASTER_KEY,$_POST['utilisateur_mot_de_passe_1']);
				$cur->utilisateur_prenom		= $_POST['utilisateur_prenom'];
				$cur->utilisateur_nom			= $_POST['utilisateur_nom'];
				$cur->utilisateur_pseudo		= $_POST['utilisateur_pseudo'];
				$cur->utilisateur_email			= $_POST['utilisateur_email'];
				$cur->utilisateur_langue		= $dlang;
				$cur->utilisateur_preferences	= serialize(array('format' => 1));
				$cur->utilisateur_statut		= 1;
				$cur->utilisateur_cle			= serialize(array());
				$cur->utilisateur_date			= dt::str('%Y-%m-%d %H:%M:%S');
				$cur->utilisateur_date_modification	= dt::str('%Y-%m-%d %H:%M:%S');
				$cur->insert();
				
				# Catégorie principale
				$cur = $con->openCursor(CP_DBPREFIX.'categories');
				$cur->cat_id		= 1;
				$cur->parent_cat_id	= 0;
				$cur->cat_url		= '';
				$cur->cat_titre		= __('Accueil');
				$cur->home_page_id	= 1;
				$cur->insert();
				
				# Catégorie pages spéciales
				$cur = $con->openCursor(CP_DBPREFIX.'categories');
				$cur->cat_id		= 2;
				$cur->parent_cat_id	= 1;
				$cur->cat_url		= '';
				$cur->cat_titre		= __('Pages spéciales');
				$cur->home_page_id	= null;
				$cur->insert();
				
				# Page d'accueil
				$cur = $con->openCursor(CP_DBPREFIX.'pub_pages');
				$cur->page_id				= 1;
				$cur->cat_id				= 1;
				$cur->page_generateur		= 'contenu';
				$cur->page_theme			= '_default';
				$cur->page_statut			= 1;
				$cur->page_modifiee			= 0;
				$cur->page_langue			= $dlang;
				$cur->page_url				= __('accueil');
				$cur->page_titre			= __('Accueil');
				$cur->page_entete			= '';
				$cur->page_entete_xhtml		= '<p>'.__('Bienvenue sur Clicpage!').'</p>';
				$cur->page_contenu			= '';
				$cur->page_contenu_xhtml	= '<p>'.sprintf(__('Ceci est un contenu d\'exemple pour la page d\'accueil de votre site. '.
											  'Lorsque vous commencerez à construire votre site, modifiez cette page et '.
											  'placez-y un contenu personnalisé. Vous pouvez trouver de l\'aide en ligne sur le '.
											  '<a %s>site Web officiel de Clicpage</a>.'), 'href="http://www.clicpage.net"').'</p>';
				$cur->page_options			= serialize(array('cp' => array('nouveau' => false, 'format' => 1, 'affiche_meta' => true, 'affiche_tags' => true, 'tags' => array())));
				$cur->page_commentaires		= 1;
				$cur->page_acces			= 0;
				$cur->page_acces_details	= null;
				$cur->page_date				= dt::str('%Y-%m-%d %H:%M:%S');
				$cur->page_date_modification= dt::str('%Y-%m-%d %H:%M:%S');
				$cur->utilisateur_id 	  	= 1;
				$cur->modification_utilisateur_id = 1;
				$cur->page_mots				= implode(' ', text::splitWords(text::toUTF8($cur->page_titre.' '.$cur->page_entete_xhtml.' '.$cur->page_contenu_xhtml)));
				$cur->insert();
				
				# Page de recherche
				$cur = $con->openCursor(CP_DBPREFIX.'pub_pages');
				$cur->page_id				= 2;
				$cur->cat_id				= 2;
				$cur->page_generateur		= 'recherche';
				$cur->page_theme			= '_default';
				$cur->page_statut			= 1;
				$cur->page_modifiee			= 0;
				$cur->page_langue			= $dlang;
				$cur->page_url				= __('recherche');
				$cur->page_titre			= __('Recherche');
				$cur->page_entete			= '';
				$cur->page_entete_xhtml		= '';
				$cur->page_contenu			= '';
				$cur->page_contenu_xhtml	= '';
				$cur->page_options			= serialize(array(
												'cp'				=> array('nouveau' => false, 'format' => 1, 'affiche_meta' => false, 'affiche_tags' => false),
												'conditions'		=> array(),
												'affiche_extrait'	=> true
											));
				$cur->page_commentaires		= 0;
				$cur->page_acces			= 0;
				$cur->page_acces_details	= null;
				$cur->page_date				= dt::str('%Y-%m-%d %H:%M:%S');
				$cur->page_date_modification= dt::str('%Y-%m-%d %H:%M:%S');
				$cur->utilisateur_id 	  	= 1;
				$cur->modification_utilisateur_id = 1;
				$cur->page_mots				= implode(' ', text::splitWords(text::toUTF8($cur->page_titre.' '.$cur->page_entete_xhtml.' '.$cur->page_contenu_xhtml)));
				$cur->insert();
				
				# Page de tags
				$cur = $con->openCursor(CP_DBPREFIX.'pub_pages');
				$cur->page_id				= 3;
				$cur->cat_id				= 2;
				$cur->page_generateur		= 'tags';
				$cur->page_theme			= '_default';
				$cur->page_statut			= 1;
				$cur->page_modifiee			= 0;
				$cur->page_langue			= $dlang;
				$cur->page_url				= __('tags');
				$cur->page_titre			= __('Tags');
				$cur->page_entete			= '';
				$cur->page_entete_xhtml		= '';
				$cur->page_contenu			= '';
				$cur->page_contenu_xhtml	= '';
				$cur->page_options			= serialize(array(
												'cp'			=> array('nouveau' => false, 'format' => 1, 'affiche_meta' => false, 'affiche_tags' => false),
												'tri'			=> array('champ' => 'page_date', 'ordre' => 'desc'),
												'affiche_extrait' => true,
												'liens_par_page'=> 15
											));
				$cur->page_commentaires		= 0;
				$cur->page_acces			= 0;
				$cur->page_acces_details	= null;
				$cur->page_date				= dt::str('%Y-%m-%d %H:%M:%S');
				$cur->page_date_modification= dt::str('%Y-%m-%d %H:%M:%S');
				$cur->utilisateur_id 	  	= 1;
				$cur->modification_utilisateur_id = 1;
				$cur->page_mots				= implode(' ', text::splitWords(text::toUTF8($cur->page_titre.' '.$cur->page_entete_xhtml.' '.$cur->page_contenu_xhtml)));
				$cur->insert();
				
				# Création du premier commentaire
				$cur = $con->openCursor(CP_DBPREFIX.'commentaires');
				$cur->commentaire_id		= 1;
				$cur->page_id				= 1;
				$cur->commentaire_statut	= 1;
				$cur->utilisateur_id		= 0;
				$cur->commentaire_ip		= http::realIP();
				$cur->commentaire_auteur	= 'Clicpage';
				$cur->commentaire_email		= 'exemple@clicpage.net';
				$cur->commentaire_titre		= NULL;
				$cur->commentaire_contenu	= '<p>'.__('Ceci est un commentaire servant d\'exemple. Lorsque vous commencerez '.
											  'à construire votre site Web, rendez-vous à l\'onglet «Commentaires» de '.
											  'l\'interface d\'administration de Clicpage et supprimez-le.').'</p>';
				$cur->commentaire_date		= dt::str('%Y-%m-%d %H:%M:%S');
				$cur->commentaire_spam		= NULL;
				$cur->insert();

				# Gadgets
				$cur = $con->openCursor(CP_DBPREFIX.'gadgets');
				$cur->gadget_inst_id			= 1;
				$cur->theme_id					= 'pluralism';
				$cur->zone_id					= 'En haut';
				$cur->gadget_id					= 'menu';
				$cur->gadget_inst_conditions	= 'a:2:{s:9:"affichage";i:1;s:10:"conditions";a:0:{}}';
				$cur->gadget_inst_titre			= __('Menu');
				$cur->gadget_inst_data			= 'a:1:{i:0;a:3:{s:4:"type";s:15:"liensConditions";s:10:"conditions";a:1:{i:0;a:4:{i:1;s:3:"and";i:2;s:6:"cat_id";i:3;s:1:"=";i:4;i:1;}}s:3:"tri";a:2:{i:0;s:10:"page_titre";i:1;s:3:"asc";}}}';
				$cur->insert();
				
				$cur->gadget_inst_id			= 2;
				$cur->theme_id					= 'pluralism';
				$cur->zone_id					= 'À droite';
				$cur->gadget_id					= 'recherche';
				$cur->gadget_inst_conditions	= 'a:2:{s:9:"affichage";i:1;s:10:"conditions";a:0:{}}';
				$cur->gadget_inst_titre			= __('Recherche');
				$cur->gadget_inst_data			= 'a:1:{s:7:"page_id";i:2;}';
				$cur->insert();
				
				$cur->gadget_inst_id			= 3;
				$cur->theme_id					= 'pluralism';
				$cur->zone_id					= 'À droite';
				$cur->gadget_id					= 'menu';
				$cur->gadget_inst_conditions	= 'a:2:{s:9:"affichage";i:2;s:10:"conditions";a:1:{i:0;a:4:{i:1;s:3:"and";i:2;s:6:"cat_id";i:3;s:2:"!=";i:4;i:1;}}}';
				$cur->gadget_inst_titre			= __('Dans cette section');
				$cur->gadget_inst_data			= 'a:1:{i:0;a:3:{s:4:"type";s:15:"liensConditions";s:10:"conditions";a:1:{i:0;a:4:{i:1;s:3:"and";i:2;s:6:"cat_id";i:3;s:1:"=";i:4;i:0;}}s:3:"tri";a:2:{i:0;s:10:"page_titre";i:1;s:3:"asc";}}}';
				$cur->insert();
				
				$cur->gadget_inst_id			= 4;
				$cur->theme_id					= 'pluralism';
				$cur->zone_id					= 'À droite';
				$cur->gadget_id					= 'tags';
				$cur->gadget_inst_conditions	= 'a:2:{s:9:"affichage";i:1;s:10:"conditions";a:0:{}}';
				$cur->gadget_inst_titre			= __('Tags');
				$cur->gadget_inst_data			= 'a:1:{s:7:"page_id";i:3;}';
				$cur->insert();
				
				# Préférences par défaut
				$cur = $con->openCursor(CP_DBPREFIX.'site');
				$cur->module = 'core';
				
				$cur->propriete = 'site_uid';
				$cur->valeur = md5(uniqid());
				$cur->insert();
				
				$cur->propriete = 'site_theme';
				$cur->valeur = 'pluralism';
				$cur->insert();
				
				$cur->propriete = 'site_copyright';
				$cur->valeur = 'Copyright © '.$_POST['utilisateur_pseudo'];
				$cur->insert();
				
				$cur->propriete = 'site_auteur';
				$cur->valeur = $_POST['utilisateur_pseudo'];
				$cur->insert();
				
				$cur->propriete = 'site_langue';
				$cur->valeur = $dlang;
				$cur->insert();
				
				$cur->propriete = 'site_description';
				$cur->valeur = '';
				$cur->insert();
				
				$cur->propriete = 'site_titre';
				$cur->valeur = __('Mon site Web');
				$cur->insert();
				
				$cur->propriete = 'site_soustitre';
				$cur->valeur = '';
				$cur->insert();
				
				$cur->propriete = 'site_statut';
				$cur->valeur = 1;
				$cur->insert();
				
				$cur->propriete = 'site_tz';
				$cur->valeur = $default_tz;
				$cur->insert();
				
				$cur->propriete = 'home_page_id';
				$cur->valeur = 1;
				$cur->insert();
				
				$cur->propriete = 'page_commentaires';
				$cur->valeur = 1;
				$cur->insert();
				
				$cur->propriete = 'moderer_commentaires';
				$cur->valeur = 0;
				$cur->insert();
				
				$cur->propriete = 'commentaire_titre';
				$cur->valeur = 0;
				$cur->insert();
				
				$cur->propriete = 'public_jquery';
				$cur->valeur = 0;
				$cur->insert();
				
				$cur->propriete = 'mode_url';
				$cur->valeur = 'query_string';
				$cur->insert();
				
				$cur->propriete = 'antispams';
				$cur->valeur = serialize(array());
				$cur->insert();
				
				# Versions
				$cur = $con->openCursor(CP_DBPREFIX.'version');			
				$cur->composant = 'core';
				$cur->type = 'core';
				$cur->version = '1.0.0beta3';
				$cur->insert();
				
				$cur->composant = 'pluralism';
				$cur->type = 'theme';
				$cur->version = '1.0.0beta3';
				$cur->insert();
				
				$_SESSION['install_utilisateur_login'] = $_POST['utilisateur_login'];
				
				$_SESSION['install_next_step'] = 5;	
				http::redirect('index.php?etape=5');
				
			}
		} catch(Exception $e) {
			$err = $e->getMessage();
		}
		
		$body =
		'<p>'.__('Veuillez remplir le formulaire ci-dessous afin de créer le premier utilisateur.').'</p>';
		
		if($err != '') {
			$body.=
			'<p class="erreur">'.$err.'</p>';
		}
		
		$body.=
		'<form method="post" action="index.php?etape=4">'.
			form::hidden('action', 'creerUtilisateur').
			form::hidden('u_date', '').
			'<fieldset>'.
			'<legend>'.__('Utilisateur').'</legend>'.
			'<p>'.
				'<label for="utilisateur_login">'.__('Nom d\'utilisateur').' *</label>'.
				form::field('utilisateur_login', 30, 64, html::escapeHTML($_POST['utilisateur_login'])).
			'</p>'.
			'<p>'.
				'<label for="utilisateur_mot_de_passe_1">'.__('Mot de passe').' *</label>'.
				form::password('utilisateur_mot_de_passe_1', 30, 128).
			'</p>'.
			'<p>'.
				'<label for="utilisateur_mot_de_passe_2">'.__('Confirmez le mot de passe').' *</label>'.
				form::password('utilisateur_mot_de_passe_2', 30, 128).
			'</p>'.
			'<p>'.
				'<label for="utilisateur_prenom">'.__('Prénom').'</label>'.
				form::field('utilisateur_prenom', 30, 255, html::escapeHTML($_POST['utilisateur_prenom'])).
			'</p>'.
			'<p>'.
				'<label for="utilisateur_nom">'.__('Nom').'</label>'.
				form::field('utilisateur_nom', 30, 255, html::escapeHTML($_POST['utilisateur_nom'])).
			'</p>'.
			'<p>'.
				'<label for="utilisateur_pseudo">'.__('Pseudonyme').' *</label>'.
				form::field('utilisateur_pseudo', 30, 255, html::escapeHTML($_POST['utilisateur_pseudo'])).
			'</p>'.
			'<p>'.
				'<label for="utilisateur_email">'.__('Adresse électronique').'</label>'.
				form::field('utilisateur_email', 30, 255, html::escapeHTML($_POST['utilisateur_email'])).
			'</p>'.
			'<input type="submit" value="'.__('Créer l\'utilisateur').'" />'.
			'</fieldset>'.
		'</form>'.
		'<p>(*) '.__('indique un champ requis').'</p>';
		
	break;
	
	case 5:
		$titre = __('Fin');
		$body = '<p class="msgOk">'.__('L\'installation de Clicpage est terminée.').'</p>'.
		'<p>'.__('Notez les informations suivantes qui seront utiles pour administrer votre site.').' </p>'.
		'<p class="item">'.__('Votre site est en ligne à l\'adresse').':</p>'.
		'<p class="itemv"><a href="'.CP_URL_PUBLIQUE.'">'.CP_URL_PUBLIQUE.'</a></p>'.
		'<p class="item">'.__('Vous pouvez dès maintenant l\'administrer en vous rendant à l\'adresse').':</p>'.
		'<p class="itemv"><a href="'.CP_URL_ADMIN.'">'.CP_URL_ADMIN.'</a></p>'.
		'<p class="item">'.__('Nom d\'utilisateur').':</p>'.
		'<p class="itemv">'.html::escapeHTML($_SESSION['install_utilisateur_login']).'</p>'.
		'<p class="item">'.__('Mot de passe').':</p>'.
		'<p class="itemv">******</p>'.
		'<p>'.__('Merci d\'utiliser Clicpage!').'</p>';
	break;
	
	default:
		http::redirect('index.php?etape=1');
	break;

endswitch;

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>
	<meta http-equiv="content-type" content="text/html;charset=utf-8" />
	<title>Clicpage - <?php echo __('Installation'); ?></title>
	<style type="text/css">@import url(design/styles.css);</style>
	<script src="../js/jquery/jquery.js" type="text/javascript"></script>
	<script src="../js/jquery/ui/jquery-ui.js" type="text/javascript"></script>
	<script src="install.js" type="text/javascript"></script>
</head>

<body>
	
	<h1><?php echo __('Installation de Clicpage'); ?></h1>
	
	<div id="steps">
		<h2><?php echo __('Étapes'); ?></h2>
		<ol>
			<li><?php echo __('Bienvenue'); ?></li>
			<li><?php echo __('Création du fichier de configuration'); ?></li>
			<li><?php echo __('Vérification de la configuration'); ?></li>
			<li><?php echo __('Création du premier utilisateur'); ?></li>
			<li><?php echo __('Fin'); ?></li>
		</ol>
	</div>
	
	<div id="main">
		<h2><?php echo $titre; ?></h2>
		<div id="contenu">
			<?php echo $body; ?>
		</div>
	</div>
	
</body>

</html>
